<?php 

/** DAO de Alunos */
class DaoAluno extends DAO {
	
	/** carrega um aluno do banco identificado por um dado especifico 
	 * de um campo */
	public function get($id) {
		$select = db_select(Aluno::TYPE, 'a')
							->fields('a')
								->condition('id', $id)
									->execute()
										->fetchAll();
		
		$alunos = array();
		$this->create($select, $alunos);
		
		return $alunos[0];
	}
	
	public function getByCpf($cpf) {
		$select = db_select(Aluno::TYPE, 'a')
		->fields('a')
		->condition('cpf', $cpf)
		->execute()
		->fetchAll();
	
		$alunos = array();
		$this->create($select, $alunos);
	
		return $alunos[0];
	}

	/** Carrega varias instancias do banco */
	public function listar(){
		$select = db_select(Aluno::TYPE)
								->fields(Aluno::TYPE)
									->execute()
										->fetchAll();
		
		$alunos = array();
		$this->create($select, $alunos);
				
		return $alunos;
	}
	
	/** Instancia os dados do banco em um objeto da classe aluno */
	private function create($select, &$alunos) {
		foreach ($select as $row) {
			// dados basicos
			$aluno 					= new Aluno();
			$aluno->id 			= $row->id;
			$aluno->cpf 		= $row->cpf;
			$aluno->email 	= $row->email;
			$aluno->nome 		= $row->nome;
			$aluno->entrada = $row->entrada;	
			
			// busca por uma instacia do campus que o aluno esta matriculado
			$dao_campus     = new DaoCampus(Campus::TYPE);
			$aluno->campus	= $dao_campus->get($row->campus_id);
				
			// busca por uma instacia do campus que o aluno esta matriculado
			$dao_curso     = new DaoCurso(Curso::TYPE);
			$aluno->curso	 = $dao_curso->get($row->curso_id);
			
			// busca por uma instnacia da condicao (estado) do aluno na universidade
			$dao_condicao    = new DaoCondicao(Condicao::TYPE);
			$aluno->condicao = $dao_condicao->get($row->condicao_id);
				
			// dados bancarios
			$dao_banco 			= new DaoBanco(Banco::TYPE);
			$aluno->banco   = $dao_banco->get($row->banco_id);
			$aluno->agencia = $row->agencia;
			$aluno->conta   = $row->conta;
			
			// busca por uma instancia da(s) bolsa(s) do aluno
			$dao_bolsa      = new DaoBolsa(Bolsa::TYPE);
			$aluno->bolsas  = $dao_bolsa->getBolsasAluno($aluno);
			
			array_push($alunos, $aluno);
		}
	}
		
}